/* src/interfaces/ecpg/pgtypeslib/extern.h */

#ifndef __PGTYPES_COMMON_H__
#define __PGTYPES_COMMON_H__

#include "pgtypes_error.h"

/* These are the constants that decide which printf() format we'll use in
 * order to get a string representation of the value */
#define PGTYPES_TYPE_NOTHING            0
#define PGTYPES_TYPE_STRING_MALLOCED        1
#define PGTYPES_TYPE_STRING_CONSTANT        2
#define PGTYPES_TYPE_CHAR            3
#define PGTYPES_TYPE_DOUBLE_NF            4    /* no fractional part */
#define PGTYPES_TYPE_INT64            5
#define PGTYPES_TYPE_UINT            6
#define PGTYPES_TYPE_UINT_2_LZ            7    /* 2 digits, pad with leading zero */
#define PGTYPES_TYPE_UINT_2_LS            8    /* 2 digits, pad with leading
                                             * space */
#define PGTYPES_TYPE_UINT_3_LZ            9
#define PGTYPES_TYPE_UINT_4_LZ            10
#define PGTYPES_TYPE_UINT_LONG            11

#define PGTYPES_FMT_NUM_MAX_DIGITS        40

union un_fmt_comb
{
    char       *str_val;
    unsigned int uint_val;
    char        char_val;
    unsigned long int luint_val;
    double        double_val;
    int64        int64_val;
};

int            pgtypes_fmt_replace(union un_fmt_comb, int, char **, int *);

char       *pgtypes_alloc(long);
char       *pgtypes_strdup(const char *);

#ifndef bool
#define bool char
#endif                            /* ndef bool */

#ifndef FALSE
#define FALSE    0
#endif                            /* FALSE */

#ifndef TRUE
#define TRUE       1
#endif                            /* TRUE */

#endif                            /* __PGTYPES_COMMON_H__ */
